package com.sailors.common.task.sdk.core.handle;

import com.sailors.common.task.sdk.core.model.FileTaskCreateDto;
import com.sailors.common.task.sdk.core.model.FileTaskFailedDto;
import com.sailors.common.task.sdk.core.model.RefreshProcessDto;
import org.springframework.web.client.RestTemplate;

import java.util.concurrent.ExecutionException;

public interface CommonTaskHandler {

    RestTemplate restTemplate = new RestTemplate();

    /**
     * 创建任务
     *
     * @param fileTaskCreateDto
     * @return
     */
    Long createTask(FileTaskCreateDto fileTaskCreateDto);

    /**
     * 刷新进度
     *
     * @param refreshProcessDto
     */
    void refreshProcess(RefreshProcessDto refreshProcessDto);

    /**
     * 异步刷新进度
     *
     * @param refreshProcessDto
     */
    void refreshProcessAsync(RefreshProcessDto refreshProcessDto) throws ExecutionException, InterruptedException;

    /**
     * 任务失败
     *
     * @param fileTaskFailedDto
     */
    void failed(FileTaskFailedDto fileTaskFailedDto);

    /**
     * 异步任务失败
     *
     * @param fileTaskFailedDto
     */
    void failedAsync(FileTaskFailedDto fileTaskFailedDto) throws ExecutionException, InterruptedException;

    /**
     * 获取任务详情
     *
     * @param id
     * @param <T>
     * @return
     */
    <T> T detail(Long id);
}
